#!/bin/sh

# PPH系统健康检查脚本
# 用于Docker健康检查和监控系统

set -e

HEALTH_URL="http://localhost:${PORT:-50000}/health"
TIMEOUT=3

# 检查HTTP服务
check_http() {
    if command -v curl >/dev/null 2>&1; then
        curl -f -s --max-time $TIMEOUT "$HEALTH_URL" >/dev/null
    elif command -v wget >/dev/null 2>&1; then
        wget -q -T $TIMEOUT -O /dev/null "$HEALTH_URL"
    else
        echo "ERROR: 未找到curl或wget命令"
        exit 1
    fi
}

# 检查数据库
check_database() {
    DB_PATH="${DB_PATH:-/data/pph.sqlite}"
    
    if [ ! -f "$DB_PATH" ]; then
        echo "ERROR: 数据库文件不存在: $DB_PATH"
        exit 1
    fi
    
    # 简单的数据库连接测试
    if ! timeout $TIMEOUT sqlite3 "$DB_PATH" "SELECT 1;" >/dev/null 2>&1; then
        echo "ERROR: 数据库连接失败"
        exit 1
    fi
}

# 检查内存使用
check_memory() {
    # 获取当前进程内存使用（MB）
    if command -v ps >/dev/null 2>&1; then
        MEMORY_MB=$(ps -o rss= -p $$ | awk '{print int($1/1024)}')
        
        # 如果内存使用超过512MB，发出警告
        if [ "$MEMORY_MB" -gt 512 ]; then
            echo "WARN: 内存使用较高: ${MEMORY_MB}MB"
        fi
    fi
}

# 主检查流程
main() {
    # HTTP服务检查
    if ! check_http; then
        echo "ERROR: HTTP健康检查失败"
        exit 1
    fi
    
    # 数据库检查
    if ! check_database; then
        echo "ERROR: 数据库健康检查失败"
        exit 1
    fi
    
    # 内存检查（仅警告）
    check_memory
    
    echo "OK: 所有健康检查通过"
    exit 0
}

# 执行检查
main "$@"
